home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Programming / vbcc / machines / amigappc / libsrc / stdio / _fillbuf.c < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-24  |  815 b   |  33 lines

  1. /*
  2. ** vbcc-Amiga-PowerPC version of _fillbuf.c
  3. **
  4. ** v0.1 04.10.97 phx
  5. */
  6.  
  7. #include <stdlib.h>
  8. #include <stdio.h>
  9. #include <powerup/gcclib/powerup_protos.h>
  10.  
  11.  
  12. /* fill buffer with new data */
  13. int _fillbuf(FILE *f)
  14. {
  15.     _chkabort();
  16.     if(!f) return(EOF);
  17.     if((f->flags&(_READABLE|_WRITE|_EOF|_ERR))!=_READABLE) return(EOF);
  18.     f->flags|=_READ;
  19.     if(!f->bufsize){if(f->flags&_UNBUF) f->bufsize=1; else f->bufsize=BUFSIZ;}
  20.     if(!f->base)
  21.         if(!(f->base=(char *)malloc(f->bufsize+1)+1))
  22.             return(EOF);
  23.     f->pointer=f->base;
  24.     f->count=PPCRead((BPTR)f->filehandle,f->pointer,(long)f->bufsize);
  25.     if(--f->count<0){
  26.         if(f->count==-1) f->flags|=_EOF;
  27.          else            f->flags|=_ERR;
  28.         f->count=0;
  29.         return(EOF);
  30.     }
  31.     return((unsigned char) *f->pointer++);
  32. }
  33.